package type2;

/**
 * @projectName: com.xiayuanxing.designPattern
 * @className: Client
 * @author: xiayuanxing
 * @description: TODO
 * @date: 2022/1/7 16:46
 * @version: 1.0
 */
public class Client {


    //观察者模式的好处:
    // 1)观察者模式设计后，会以集合的方式来管理用户(Observer)，包括注册，移除和通知。
    // 2)这样，我们增加观察者(这里可以理解成一个新的公告板)，就不需要去修改核心类WeatherData不会修改代码，遵守了ocp原则。

    //观察者模式在Jdk应用的源码分析:
    // 1)Jdk的Observable类就使用了观察者模式
    // 2)代码分析+模式角色分析
    // 3)模式角色分析:
    // Observable的作用和地位等价于我们前面讲过Subject
    // Observable是类，不是接口，类中已经实现了核心的方法,即管理Observer的方法add..delete..notify...
    // Observer的作用和地位等价于我们前面讲过的Observer,有update
    // Observable和Observer的使用方法和前面讲过的一样，只是Observable是类，通过继承来实现观察者模式

    public static void main(String[] args) {

        //创建一个WeatherData
        WeatherData weatherData = new WeatherData();
        //创建观察者
        CurrentConditions currentConditions = new CurrentConditions();
        BaiduSite baiduSite = new BaiduSite();

        //注册到WeatherData
        weatherData.registerObserver(currentConditions);
        weatherData.registerObserver(baiduSite);

        //测试
        System.out.println("通知各个注册的观察者,看看信息");
        weatherData.setData(10f,100f,10.3f);

        //移除气象局官网
        weatherData.removeObserver(currentConditions);

        //测试
        System.out.println();
        System.out.println("通知各个注册的观察者,看看信息");
        weatherData.setData(10f,100f,30.3f);

    }
}
